
#ifndef __H_SYMPHONY_KEYWORDS
#define __H_SYMPHONY_KEYWORDS

#include <set>
#include <string>
#include "regex.h"
#include "symphony.h"



/*
 * This class is designed to "kind of" emulate an interface to
 * be implemented by classes which will have to be searchable
 * by keyword(s).
 */
class Keywords {
  private:
    std::set<std::string>         _keywords;

  public:
    // Constructors...
    Keywords( void );
    ~Keywords( void );

    // Public accessor methods...
    std::set<std::string>&        getKeywords( void )                                   { return _keywords; }
    const std::set<std::string>&  getKeywords( void ) const                             { return _keywords; }
    void                          setKeywords( const std::set<std::string>& keywords )  { _keywords = keywords; }

    // General methods...
    std::string                   getKeywordList( std::string glue = " " );
    void                          addKeyword( const std::string& keyword );
    void                          removeKeyword( const std::string& keyword );
    bool                          matchesKeyword( const std::string& search );
    std::string                   serializeKeywords( void );
    void                          unserializeKeywords( const std::string& serialization );

};



#endif // #ifndef __H_SYMPHONY_KEYWORDS

